
function plotErr(listE_train, listE_val, titre)
%PLOTERR Plot the evolution of the error
%
% Notations:	Nt: Number of iterations
%
% INPUT:
% listE_train	-- Error on the training set over time (Nt)
% listE_val		-- Error on the validation set over time (Nt)
% titre			-- Title of the graph
%
% USAGE:
% plotErr(listE_train, listE_val, titre);

Nt = length(listE_val);

hold on;
p1 = plot(listE_train, 'b');
p2 = plot(listE_val, 'g');

axis([1 Nt 0 max([listE_val(:);listE_train(:)])]);
hax = axis;

% Minimum
[th iMin] = min(listE_val);
line_min = line([iMin, iMin], hax(3:4));
set(line_min, 'Color', 'r');
set(gca, 'XTick', unique(sort([1, get(gca, 'XTick'), iMin, Nt])));

% Axis & title
h = xlabel('Iterations');
set(h, 'FontSize', 16);
h=ylabel('E_{log}');
set(h, 'FontSize', 16);
if length(titre)>0
	h=title(titre);
	set(h, 'FontSize', 18);
end

% Legend
hleg = legend([p1 p2 line_min], 'Training set', 'Validation set', 'Minimum (validation set)', 'Location', 'NorthEast');
set(findobj(hleg, 'type', 'text'), 'FontSize', 14)

% Minimum
valMin = listE_val(iMin);
plot(iMin, valMin, 'o', 'MarkerFaceColor', 'k', 'MarkerEdgeColor','k', ...
    'LineWidth', 2, 'MarkerSize', 4);
text(iMin, valMin,...
	sprintf('E_{log} = %.1e', valMin),...
	'HorizontalAlignment','right',...
	'VerticalAlignment', 'top',...
	'FontSize',13);

hold off;

end